package com.ms.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ms.domain.dto.GenreUpdateDTO;
import com.ms.domain.entity.Genre;
import com.ms.domain.vo.GenreSearchVO;

import java.util.List;
import java.util.Map;

public interface GenreService {
    /**
     * 获取分类树
     *
     * @return 分类树
     */
    List<Map<String, Object>> getGenreTree();

    /**
     * 根据类型获取分类
     *
     * @param type 分类类型 (MAIN, SUB, SUBTYPE)
     * @return 分类列表
     */
    List<Genre> getGenresByType(String type);

    /**
     * 根据父级分类获取子分类
     *
     * @param parentId 父级分类ID
     * @param type 分类类型
     * @return 分类列表
     */
    List<Genre> getGenresByParent(Integer parentId, String type);

    /**
     * 创建分类
     * @param genre  分类
     */
    void createGenre(Genre genre);

    /**
     * 修改分类
     * @param id 分类id
     * @param dto 修改参数
     */
    void updateGenre(Integer id, GenreUpdateDTO dto);

    /**
     * 删除分类
     * @param id 分类id
     */
    void deleteGenre(Integer id);

    /**
     * 搜索分类
     * @param keyword 关键字
     * @param type  类型
     * @return 分类列表
     */
    List<GenreSearchVO> searchGenres(String keyword, String type);

    /**
     * 分页搜索分类
     * @param keyword 关键字
     * @param type 类型
     * @param page 页码
     * @param size 每页数量
     * @return 分类分页数据
     */
    Page<GenreSearchVO> searchGenresPage(String keyword, String type, Integer page, Integer size);

    /**
     * 根据音乐id获取分类
     * @param musicId 音乐id
     * @return 分类列表
     */
    List<Genre> getGenreByMusicId(Integer musicId);

    /**
     * 获取分类
     * @param id 分类id
     * @return  分类
     */
    Genre getGenre(Integer id);
}